/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.Secretaria;

/**
 *
 * @author Soares
 */
public class SecretariaDAO {

    private Connection con;          //Objeto utilizado para o estabelecimento de uma conexão.
    private PreparedStatement pstm;  //Objeto utilizado para o envio de instruções SQL.  
    private ResultSet rs;            //Objeto utilizado para guardar o resultado de um SELECT.

    public static final int ORDEM_POR_ID = 0;
    public static final int ORDEM_POR_NOME = 1;

    public SecretariaDAO() throws SQLException {
        //Registra o conector com o banco de dados através do DriverManager.
        DriverManager.registerDriver(new org.postgresql.Driver());
        //Aqui criamos uma conexão para o envio de instruções SQL para o PostgreSQL.
        con = DriverManager.getConnection("jdbc:postgresql://localhost/odontologico",
                "postgres",
                "llucas");
    }

    //O método salvar envia uma instrução INSERT para o banco de dados PostgreSQL.    
    public void salvar(Secretaria secretaria) throws SQLException {
        //O caracter ? indica um parâmetro (valor) que será passado para a instrução.
        pstm = con.prepareStatement(
                "insert into secretaria(nome, telefone, endereco, email, rg) values (?, ?, ?, ?, ?)");
        //Aqui passamos os valores de cada um dos parâmetros, na ordem que estão na instrução
        //SQL, da esquerda para direita.
        pstm.setString(1, secretaria.getNome());
        pstm.setString(2, secretaria.getTelefone());
        pstm.setString(3, secretaria.getEndereco());
        pstm.setString(3, secretaria.getEmail());
        pstm.setInt(4, secretaria.getRg());
        pstm.execute();    //Após informar todos os parâmetros, mandamos executar a instrução.        
    }

    //O método alterar envia uma instrução UPDATE para o banco de dados PostgreSQL.
    public void alterar(Secretaria secretaria) throws SQLException {
        pstm = con.prepareStatement(
                "update secretaria set nome = ?, telefone = ?, endereco = ?, email = ?, rg = ? where id = ?");
        pstm.setString(1, secretaria.getNome());
        pstm.setString(2, secretaria.getTelefone());
        pstm.setString(3, secretaria.getEndereco());
        pstm.setString(4, secretaria.getEmail());
        pstm.setInt(4, secretaria.getRg());
        pstm.setInt(6, secretaria.getId());   //Altera de acordo com o ID informado pelo usuário.
        pstm.execute();
    }

    //O método excluir envia uma instrução DELETE para o banco de dados PostgreSQL.
    public void excluir(Secretaria secretaria) throws SQLException {
        //Deleta o registro da tabela cujo ID é informado no parâmetro da instrução.
        pstm = con.prepareStatement(
                "delete from secretaria where id = ?");
        pstm.setInt(1, secretaria.getId());  //Exclui de acordo com o ID informado pelo usuário.
        pstm.execute();
    }

    //O método pesquisar será utilizado para buscar um registro da tabela de MP3
    //com base no ID da música, que é a chave primária da tabela MP3.
    public Secretaria pesquisar(int id) throws SQLException {
        Secretaria secretaria = null;
        pstm = con.prepareStatement("select * from secretaria where id = ?");
        pstm.setInt(1, id);
        rs = pstm.executeQuery();
        if (rs.next()) {
            secretaria = new Secretaria();
            secretaria.setId(rs.getInt("id"));
            secretaria.setNome(rs.getString("nome"));
            secretaria.setTelefone(rs.getString("telefone"));
            secretaria.setEndereco(rs.getString("endereco"));
            secretaria.setEmail(rs.getString("email"));
            secretaria.setRg(rs.getInt("rg"));
        }
        return secretaria;
    }

    public List<Secretaria> getTodosSecretaria(int ordem) throws SQLException {
        ArrayList<Secretaria> nome = new ArrayList();  //Cria uma lista de mÃºsicas vazia.
        Secretaria secretaria = null;  //Define um objeto do tipo Mp3 tambÃ©m vazio.

        switch (ordem) {
            case ORDEM_POR_ID:
                pstm = con.prepareStatement("select * from consulta order by id");
                break;
            case ORDEM_POR_NOME:
                pstm = con.prepareStatement("select * from consulta order by nome");
        }

        rs = pstm.executeQuery();
        while (rs.next()) {
            secretaria = new Secretaria();
            secretaria.setId(rs.getInt("id"));
            secretaria.setNome(rs.getString("nome"));
        }

        return nome;
    }

}
